home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / hitton / htn_src.lzh / HTN_SRC / HTN_INIT.C < prev    next >
Text File  |  2000-07-03  |  9KB  |  369 lines

  1. /*    『ひっとん』 ver.1.00    初期設定 (HTN_INIT.C)        2000  TAU Software    */
  2.  
  3. # include    "HTN_DEF.H"
  4.  
  5.  
  6. /***  グラフィックデータ格納領域のポインタ処理  ***/
  7.                 /* [返り値]  格納領域の先頭アドレス  */
  8. unsigned char *GRAP(gp0)
  9. unsigned char    *gp0;        /*  先頭アドレスの指定 ( NULLの場合は、読取り )  */
  10. {
  11.     static unsigned char    *gp;    /*  先頭アドレス記憶用  */
  12.  
  13.     if(gp0 != NULL) gp=gp0;
  14.     return gp;
  15. }
  16.  
  17.  
  18. /***  ファイル名の処理  ***/
  19.                 /* [返り値]  ファイル名  */
  20. char *FILES_NAME(no,fn)
  21. int    no;            /*  ファイル番号
  22.                     0: テキストデーター    1: PCGデーター
  23.                     2: スプライトパレットデーター    3: グラフィックデーター
  24.                     4: 音楽データー        5: 音楽データ
  25.                     6: 記録データー    */
  26. char    *fn;            /*  ファイル名の指定 ( NULLの場合は、読取り )  */
  27. {
  28.     static char    fns0[7][256]={ "HTN_TXDT.DAT", "HTN_SPDT.SP",  "HTN_SPDT.PAL",
  29.                            "HTN_GRDT.PIC", "HTN_MSDT.ZPD","HTN_MSDT.ZMD", "HTN_RCDT.DAT" };
  30.                                 /*  ファイル名(初期) */
  31.  
  32.     char *fns[]={*fns0,*(fns0+1),*(fns0+2),*(fns0+3),*(fns0+4),*(fns0+5),*(fns0+6),*(fns0+7)};
  33.  
  34.     if(fn != NULL) strcpy(*(fns+no),fn);
  35.     return *(fns+no);
  36. }
  37.  
  38.  
  39. /***  レコードの処理  ***/
  40.                 /* [返り値]  ファイル名  */
  41. RECS *RECS_DATA(no,rec)
  42. int    no;    /*  順位  */
  43. RECS    *rec;    /*  レコードの指定 ( NULLの場合は、読取り )  */
  44. {
  45.     static RECS    recs_memo[5]={{ "コウジ",  19072,  369, 14 },
  46.                       { "アオイ ",  17368,  324, 12 },
  47.                       { "ユウキ ",  14191,  230,  9 },
  48.                       { "イクミ ",  11537,  259, 10 },
  49.                       { "コズエ",   9126,  223,  8 } };
  50.  
  51.     if(rec != NULL) *(recs_memo+no)=*rec;
  52.     return (recs_memo+no);
  53. }
  54.  
  55.  
  56. /***  環境の処理  ***/
  57.                 /* [返り値]  環境状態  */
  58. int CNF_STAT(no,cnf)
  59. int    no;    /*  環境番号  */
  60. int    cnf;    /*  環境内容の指定 ( -1の場合は、読取り )  */
  61. {
  62.     static char    cnfs[2]={ 1,1 };
  63.         /*  ディスク書込(1:ON/0:OFF/2:Fileナシ)、演奏(1:ON/0:OFF)  */
  64.  
  65.     if(cnf != -1) *(cnfs+no)=cnf;
  66.     return *(cnfs+no);
  67. }
  68.  
  69.  
  70. /***  ディスク書き込み  ***/
  71.                 /* [返り値]  0:正常 / -1:エラー  */
  72. int WRITE_REC()
  73. {
  74.     FILE    *fp;
  75.     int    err=-1;
  76.  
  77.     if(CNF_STAT(0,-1) != 0){
  78.         if((fp=fopen(FILES_NAME(6,NULL),"wb")) != NULL){
  79.             if(fputs(RECS_HEAD,fp) == 0){
  80.                 if(fwrite(RECS_DATA(0,NULL),sizeof(RECS),5,fp) == 5) err=0;
  81.             }
  82.         }
  83.         fclose(fp);
  84.         if(err) unlink(FILES_NAME(6,NULL)); else CNF_STAT(0,1);
  85.     } else err=0;
  86.  
  87.     return err;
  88. }
  89.  
  90.  
  91.  
  92. int main(argc,argv)
  93. int    argc;
  94. char    *argv[];
  95. {
  96.     int    i,j,k;
  97.     int    ck,ln;
  98.  
  99.     int    err=0;
  100.  
  101.     short int    tx_pal0[16];
  102.     short int    tx_pal[16]={     0,19026,34814, 2046,65504,65472,64544,63488,
  103.                      49120,32704,48190,30782,34786, 1984,33854,30782 };
  104.  
  105.     char    header[17];
  106.     unsigned char    *gp0,*gp;
  107.  
  108.     FILE    *fp;
  109.  
  110.  
  111.     printf("『ひっとん』<Ver.1.00>   2000  TAU Software\n");
  112.  
  113.     for(i=1;i<argc;i++){
  114.         strupr(*(argv+i));
  115.         ln=strlen(*(argv+i));
  116.         if(**(argv+i)=='/' || **(argv+i)=='-'){
  117.             ck=0;
  118.             if(ln < 2) continue;
  119.             switch(*(*(argv+i)+1)){
  120.                 case '?':
  121.                 case 'H': err=2; break;
  122.                 case 'S': CNF_STAT(0,0); break;
  123.                 case 'Z': CNF_STAT(1,0); break;
  124.                 case 'F': if(ln >= 3){FILES_NAME(6,*(argv+i)+2); ck=0;} else ck=1;
  125.             }
  126.         } else if(ck){ FILES_NAME(6,*(argv+i)); ck=0; }
  127.         if(err) break;
  128.     }
  129.     if(err == 2){
  130.         printf("起動法 : HTN_MAIN.X [<スイッチ(/ or -)> ...]\n");
  131.         printf("スイッチ:(大・小文字の区別はありません)\n");
  132.         printf("\t   /F <ファイル>   記録ファイルの指定 (default:HTN_RCDT.DAT)\n");
  133.         printf("\t   /S\t\t     ディスクへの書込禁止(記録データ)\n");
  134.         printf("\t   /Z\t\t     音楽・効果音の演奏をしない\n");
  135.         printf("\t   /H or /?\t     ヘルプメッセージの表示\n\n");
  136.         while(KFLUSHIO(0xFF));
  137.         exit(1);
  138.     }
  139.  
  140.  
  141.     err=0;
  142.     if(!bldmem(34)){
  143.       if((gp0=malloc(35396)) != NULL){
  144.  
  145.             GRAP(gp0);
  146.  
  147.  
  148.         for(i=0;i<7;i++){
  149.         if((fp=fopen(FILES_NAME(i,NULL),"r")) == NULL){
  150.             if((i==4 || i==5) && CNF_STAT(1,-1)==0) continue;
  151.             if(i==6 && CNF_STAT(0,-1)==0) continue;
  152.             printf("「%s」がないっ!\n",FILES_NAME(i,NULL));
  153.             if(i<4) err=2; else{
  154.                 if(err == 0){
  155.                     if(i==4 || i==5) CNF_STAT(1,0);
  156.                     if(i == 6) CNF_STAT(0,2);
  157.                 }
  158.             }
  159.         }
  160.         }                    /*  ファイル存在チェック  */
  161.         fcloseall();
  162.  
  163.  
  164.         if(!err){
  165.         /* Z-MUSIC Check */
  166.         if(CNF_STAT(1,-1) == 1){
  167.             if(zm_ver()&0xFFFF){
  168.                 m_init();
  169.                 m_adpcm_block(FILES_NAME(4,NULL));
  170.                 zmd_play(FILES_NAME(5,NULL));
  171.                 m_stop(0,0,0,0,0,0,0,0,0,0);
  172.             } else CNF_STAT(1,0);
  173.         }
  174.  
  175.         if(CNF_STAT(0,-1) != 2){
  176.             if((fp=fopen(FILES_NAME(6,NULL),"rb")) != NULL){/* 記録データ読み込み */
  177.                 err=2;
  178.                 if(fgets(header,9,fp) != NULL){
  179.                     if(strcmp(header,RECS_HEAD) == 0){
  180.                         if(fread(RECS_DATA(0,NULL),sizeof(RECS),5,fp) == 5) err=0;
  181.                     }
  182.                 }
  183.                 fclose(fp);
  184.                 if(err) printf("記録ファイル「%s」のフォーマットが、違うよ!\n",FILES_NAME(6,NULL));
  185.             }
  186.         }
  187.  
  188.         if(CNF_STAT(0,-1) == 2){
  189.             if(WRITE_REC()){ printf("記録ファイル「%s」の作成に失敗しちゃった!\n",FILES_NAME(6,NULL)); err=2; }
  190.         }
  191.         }
  192.  
  193.         if(!err){
  194.         if((fp=fopen(FILES_NAME(0,NULL),"rb")) != NULL){    /* テキストデータ読み込み */
  195.             if(fread(gp0,sizeof(char),14406,fp) < 14406) err=8;
  196.             fclose(fp);
  197.         } else err=8;
  198.         }
  199.  
  200.  
  201.         if(!err){
  202.  
  203.         srand(time(NULL));
  204.  
  205.         TGUSEMD(1,2);
  206.         OS_CUROF();
  207.         CRTMOD(8);
  208.         printf("\x1B[>1h");
  209.         G_CLR_ON();
  210.         TXFILL0(0,0,1024,1024,15,0);
  211.         VPAGE2(0);
  212.         if(JOY0(2) & 0x40) VPAGE2(0x2F);
  213.  
  214.  
  215.         for(i=0;i<16;i++) *(tx_pal0+i)=TPALET2(i,-1);
  216.  
  217.  
  218.         /*  ちょっとまっててね  */
  219.         PLAY_MUS(4);
  220.         VDISP0();
  221.         TXFILL0(0,0,512,512,8,0xFFFF);
  222.         B_WPOKE((unsigned short *)0xE80014,0);
  223.         B_WPOKE((unsigned short *)0xE80016,0);    /*  テキストスクロール  */
  224.         TPALET2( 8,    1);
  225.         TPALET2( 9,65534);
  226.         TPALET2(10, 2108);
  227.         TCOLOR(1);
  228.         TEXTPUT(32,176,(struct FNTBUF *)(WAIT(0)));
  229.         TCOLOR(2);
  230.         TEXTPUT(32,176,(struct FNTBUF *)(WAIT(1)));
  231.  
  232.  
  233.         VDISP0()
  234.         VPAGE2(0x2F);
  235.  
  236.  
  237.  
  238.         SP_INIT();
  239.         BGCTRLST(0,0,0);
  240.         BGCTRLST(1,1,0);
  241.  
  242.  
  243.                 gp=(unsigned char *)HTN_LOG0;
  244.         if((fp=fopen(FILES_NAME(1,NULL),"rb")) != NULL){
  245.             if(fread(gp,sizeof(unsigned char),8448,fp) < 8448) err|=9;
  246.             fclose(fp);
  247.             if (!err) for(i=0;i<66;i++) SP_DEFCG(i,1,gp+i*128);
  248.         } else err|=9;                    /* スプライトデータ定義 */
  249.  
  250.         if((fopen(FILES_NAME(2,NULL),"rb")) != NULL){
  251.             if(fread(gp,sizeof(unsigned char),480,fp) < 480) err|=10;
  252.             fclose(fp);
  253.                         if (!err){
  254.               for(j=0;j<15;j++) for(i=0;i<16;i++)
  255.                 SPALET0(i,j+1,*((unsigned short *)(gp+j*0x20+i*2)));
  256.             }
  257.         } else err|=10;                    /* スプライトパレット定義 */
  258.  
  259.         BGTEXTCL(0,256); BGTEXTCL(1,256);
  260.  
  261.  
  262.         APAGE(1);
  263.         if(apic_load(FILES_NAME(3,NULL),0,0)) err|=4;
  264.  
  265.  
  266.         if(!err){
  267.                 APAGE(1);
  268.                 GRM_GP(256,256, 64, 48,LVL_PNL(0),1);    /* 「レベル」    */
  269.             APAGE(0);
  270.             GRM_GP( 12, 15, 64, 24,LVL_PNL(0),0);
  271.             GRM_GP( 12,137, 64, 24,LVL_PNL(1),0);
  272.             GRM_GP(432, 48, 64, 24,LVL_PNL(0),0);
  273.  
  274.             APAGE(1);
  275.             GRM_GP(320,256, 82, 48,NXT_PNL(0),1);    /* 「ネクスト」    */
  276.             APAGE(0);
  277.             GRM_GP(120, 63, 82, 24,NXT_PNL(0),0);
  278.             GRM_GP(120,185, 82, 24,NXT_PNL(1),0);
  279.  
  280.             APAGE(1);
  281.             GRM_GP(402,256, 64, 48,SCR_PNL(0),1);    /* 「スコア」    */
  282.             APAGE(0);
  283.             GRM_GP(120, 15, 64, 24,SCR_PNL(0),0);
  284.             GRM_GP(120,137, 64, 24,SCR_PNL(1),0);
  285.             GRM_GP(348, 72, 64, 24,SCR_PNL(0),0);
  286.  
  287.             APAGE(1);
  288.             GRM_GP(256,304, 82, 24,BLK_PNL(0),1);    /* 「ブロック」(1P) */
  289.             GRM_GP(338,304, 82, 24,BLK_PNL(1),1);    /* 「ブロック」(2P) */
  290.             APAGE(0);
  291.             GRM_GP(102, 39, 82, 24,BLK_PNL(0),0);
  292.             GRM_GP(102,161, 82, 24,BLK_PNL(1),0);
  293.             GRM_GP(412, 72, 82, 24,BLK_PNL(1),0);
  294.  
  295.             APAGE(1);
  296.             GRM_GP(256,384,132, 28,RANK_LOG,1);    /* 「ランキング」(ランキング画面)*/
  297.             APAGE(0);
  298.             GRM_GP(288, 24,132, 28,RANK_LOG,0);
  299.  
  300.             APAGE(1);
  301.             GRM_GP(420,304, 64, 24,NAME_PNL,1);    /* 「なまえ」(ランキング画面) */
  302.             APAGE(0);
  303.             GRM_GP(284, 72, 64, 24,NAME_PNL,0);
  304.  
  305.  
  306.             APAGE(1);
  307.             GRM_GP(256,412, 54, 65,HTN_LOG0  ,1);    /* 「ひ」    */
  308.             GRM_GP(310,412, 48, 65,HTN_LOG1  ,1);    /* 「っ」    */
  309.             GRM_GP(358,412, 44, 65,HTN_LOG2  ,1);    /* 「と」    */
  310.             GRM_GP(402,412, 51, 65,HTN_LOG3  ,1);    /* 「ん」    */
  311.             GRM_GP(256,477,203, 19,TAU_LOG   ,1);    /*  「2000 TAU Software」 */
  312.             GRM_GP(256,328,128, 28,SEL_PNL(0),1);    /*  選択肢「スタート」    */
  313.             GRM_GP(256,356,128, 28,SEL_PNL(1),1);    /*  選択肢「ランキング」*/
  314.             GRM_GP(384,356,128, 28,SEL_PNL(2),1);    /*  選択肢「おしまい」    */
  315.  
  316.  
  317.             APAGE(0);
  318.             GRM_GP(44,484,203,19,TAU_LOG,0);
  319.  
  320.  
  321.             CRTMOD(266);
  322.             WINDOW(0,0,511,511);
  323.  
  324.  
  325.             VPAGE2(0);
  326.             TXFILL0(0,0,512,512,15,0);    /*  テキスト画面クリア  */
  327.             for(i=0;i<16;i++) TPALET2(i,*(tx_pal+i));
  328.  
  329.             TITLE0();    /*  タイトル部へ  */
  330.  
  331.  
  332.         }
  333.  
  334.  
  335.         PLAY_MUS(0);
  336.         VPAGE2(0);
  337.         for(i=0;i<16;i++) TPALET2(i,*(tx_pal0+i));
  338.         B_WPOKE((unsigned short *)0xE80014,0);
  339.         B_WPOKE((unsigned short *)0xE80016,0);    /*  テキストスクロール  */
  340.         TXFILL0(0,0,1024,1024,15,0);
  341.         CRTMOD(16);
  342.         TGUSEMD(1,1);
  343.         printf("\x1B[>1l");
  344.         OS_CURON();
  345.  
  346.         while(KFLUSHIO(0xFE));
  347.         }
  348.  
  349.  
  350.         free(gp0);
  351.       } else err=1;
  352.       rstmem();
  353.     } else err=1;
  354.  
  355.  
  356.     if(err == 1) printf("メモリが、足りないよ!\n");
  357.     if(err & 4) printf("グラフィック「%s」のフォーマットが、違うよ!\n",FILES_NAME(3,NULL));
  358.     if(err & 8) printf("「%s」の読込み、失敗したみたい!\n",FILES_NAME(err&3,NULL));
  359.  
  360.     if(!err){
  361.         printf("『ひっとん』<Ver.1.00>   2000  TAU Software\n");
  362.         printf("楽しんでいただけました?\n");
  363.     }
  364.  
  365.     exit(err);
  366.  
  367. }
  368.  
  369.